# -*- coding: utf-8 -*-

# Will be the interface connection with the server



from twisted.internet import reactor, protocol

# Standard library imports
import string
import sys
try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO
    
    
# a client protocol

class BufferingProtocol(protocol.Protocol):
    """Simple utility class that holds all data written to it in a buffer."""
    def __init__(self):
        self.buffer = StringIO()
        self.received = 0
        self.part = 0
        #self.buffer = open(self.data['file'], "wb")
        

    def dataReceived(self, data):
        self.received +=  len(data)
        self.part += len(data)
        self.buffer.write(data)
        
        

class EchoClient(protocol.Protocol):
    """Once connected, send a message, then print the result."""
    
    def connectionMade(self):
        self.buffer = BufferingProtocol()
        self.transport.write("hello, world!")
        
    
    def dataReceived(self, data):
        "As soon as any data is received, write it back."
        self.buffer.dataReceived(data)
        print "Server said:", data
        
        #self.transport.loseConnection()
    
    def connectionLost(self, reason):
        print "connection lost"

class EchoFactory(protocol.ClientFactory):
    protocol = EchoClient

    def clientConnectionFailed(self, connector, reason):
        print "Connection failed - goodbye!"
        reactor.stop()
    
    def clientConnectionLost(self, connector, reason):
        print "Connection lost - goodbye!"
        reactor.stop()


# this connects the protocol to a server runing on port 8000
def main():
    f = EchoFactory()
    reactor.connectTCP("localhost", 8000, f)
    reactor.run()

# this only runs if the module was *not* imported
if __name__ == '__main__':
    main()